import { GeocodeType } from '../../Source/Cesium.js';
import { Ion } from '../../Source/Cesium.js';
import { IonGeocoderService } from '../../Source/Cesium.js';
import createScene from '../createScene.js';
import { when } from '../../Source/Cesium.js';

describe('Core/IonGeocoderService', function() {

    var scene;
    beforeEach(function() {
        scene = createScene();
    });

    afterEach(function() {
        scene.destroyForSpecs();
    });

    it('Creates with default parameters', function() {
        var service = new IonGeocoderService({ scene: scene });

        expect(service._accessToken).toEqual(Ion.defaultAccessToken);
        expect(service._server.url).toEqual(Ion.defaultServer.url);
    });

    it('Creates with specified parameters', function() {
        var accessToken = '123456';
        var server = 'http://not.ion.invalid/';

        var service = new IonGeocoderService({
            accessToken: accessToken,
            server: server,
            scene: scene
        });

        expect(service._accessToken).toEqual(accessToken);
        expect(service._server.url).toEqual(server);
    });

    it('calls inner geocoder and returns result', function () {
        var service = new IonGeocoderService({ scene: scene });

        var expectedResult = when.resolve();
        spyOn(service._pelias, 'geocode').and.returnValue(expectedResult);

        var query = 'some query';
        var result = service.geocode(query, GeocodeType.SEARCH);
        expect(result).toBe(expectedResult);
        expect(service._pelias.geocode).toHaveBeenCalledWith(query, GeocodeType.SEARCH);
   });
});
